package 算法.其他算法;

public class JZ81调整数组顺序使奇数位于偶数前面2 {
    //使得所有的奇数位于数组的前面部分，所有的偶数位于数组的后面部分，对奇数和奇数，偶数和偶数之间的相对位置不做要求

    //双指针复制法 能保证相对位置也不变
    public int[] reOrderArrayTwo (int[] array) {
        // write code here
        int n = array.length;
        int[] res = new int[n];
        int odd = 0;
        for(int i=0;i<n;i++){
            if(array[i]%2 == 1)
                odd++;
        }
        int x = 0 , y = odd;
        for(int i=0;i<n;i++){
            if(array[i]%2==1){
                res[x] = array[i];
                x++;
            }else{
                res[y] = array[i];
                y++;
            }
        }
        return  res;
    }

    //双指针交换法
    public int[] reOrderArrayTwo2 (int[] array) {
        int i = 0;
        int j = array.length-1;
        while (i<j){
            if(array[i]%2==1 && array[j]%2==1)
                //左右都是奇数
                i++;
            else if(array[i]%2==1 && array[j]%2==0){
                //左奇右偶
                i++;
                j--;
            }else if(array[i]%2==0 && array[j]%2==1){
                //左偶右奇
                int tmp = array[i];
                array[i] = array[j];
                array[j] = tmp;
            }else{
                //左右都是偶
                j--;
            }
        }
        return array;
    }
}
